package com.data.simulation;

import com.data.tree.TreeNode;

/**
 * @author zsj
 * @date 2023/9/27 15:47
 * <p>
 *    递归实现 前中后 遍历二叉树
 */
public class TreeRecursion {
    public static void main(String[] args) {
        /*
        1
     2    3
   4    5    6
         */
        TreeNode node = new TreeNode(1,
                new TreeNode(2, new TreeNode(4), null),
                new TreeNode(3, new TreeNode(5), new TreeNode(6)));
//        preOrder(node);
//        midOrder(node);
        postOrder(node);
    }

    /**
     * 前序遍历
     * 先当前节点
     * 然后左子树
     * 然后右子树
     * 124356
     */
    static void preOrder(TreeNode node){
        System.out.println(node.value);//先输出当前节点
        if (node.left!=null){
            preOrder(node.left);
        }
        if (node.right!=null){
            preOrder(node.right);
        }
    }


    /**
     * 中序遍历
     * 先左子树
     * 然后当前节点
     * 然后右子树
     * 421536
     * @param node 树节点
     */
    static void midOrder(TreeNode node){
        if (node==null)return;
        midOrder(node.left);
        System.out.println(node.value);
        midOrder(node.right);
    }


    /**
     * 后序遍历
     * 先左子树
     * 然后右子树
     * 最后当前节点
     * 425631
     * @param node 树节点
     */
    static void postOrder(TreeNode node){
        if (node==null)return;
        postOrder(node.left);
        postOrder(node.right);
        System.out.println(node.value);
    }


}
